package com.zwps.common.core.context;

import com.zwps.common.api.model.vo.LoginInfoVO;
import com.zwps.common.core.exception.AuthenticationFailureException;

/**
 * 存储当前登录用户信息，在控制层校验登录时就会注册（注意通过消息队列或定时任务触发的调用会获取不到的）
 * 
 * @ClassName: LoginInfoContext
 * @Description:
 * @author lyh
 * @date 2023年5月26日 上午10:43:25
 *
 */
public class LoginInfoContext {

    private static ThreadLocal<LoginInfoVO> LOGIN_INFO = new ThreadLocal<LoginInfoVO>();

    public static void setLoginInfo(LoginInfoVO loginInfo) {
        LOGIN_INFO.set(loginInfo);
    }

    public static LoginInfoVO getLoginInfo() {
        LoginInfoVO vo = LOGIN_INFO.get();
        if (vo == null) {
            throw new AuthenticationFailureException("未获取当前登录信息，请重新登录");
        }
        return vo;
    }

    public static void clear() {
        LOGIN_INFO.remove();
    }
}
